ISCApplicationEnvironment

The following table contains information on the ISCApplicationEnvironment interface:

Signature

Description

Valid Arguments

ISCPropertyBag

PropertyBag(VARIANT Category[optional], VARIANT Name[optional], VARIANT AsString[optional])

Populates a property bag with one or more property values as indicated by Category and Name

Category:

VT_BSTR � Must be Application.API.

Name:

  • VT_BSTR � The property with the given name and category is returned. Must be Is Empty to determine if the message log has messages. To retrieve the message log content, it must be Log.

AsString:

  • Empty � All values in the property bag are presented in their native type.
  • VT_BOOL � If set to TRUE, all values in the property bag are presented as strings.

Example 32

The following example illustrates how to use the API to check messages from the API extended message log using C++. It assumes that there is an Application object from Example 1:

CString GetExtendedErrorInfo(ISCApplicationPtr & scAppPtr)
{
    CString csExtendedErrors = "";
    long index = 0;
    
    // Do we have messages in the log?
    variant_t val = scAppPtr->GetApplicationEnvironment()-> GetPropertyBag("Application.Api.MessageLog","Is Empty")-> GetValue(COleVariant(index));
     if (val.vt == VT_BOOL && val.boolVal == false)
     {  
         // Retrieve the log
         val = m_scAppPtr->GetApplicationEnvironment()-> GetPropertyBag("Application.Api.MessageLog","Log")-> GetValue(COleVariant(index));
         if (val.vt & VT_ARRAY)
         {   
	 // this is a SAFEARRAY
	 	
	 VARIANT HUGEP *pArray;
	 HRESULT hr;
             
	 // Get a pointer to the elements of the array.
	 hr = SafeArrayAccessData(val.parray, (void HUGEP**)&pArray);
	 if (FAILED(hr))
	     return csExtendedErrors;
             
	 long numErrors = 0;
	 VARIANT vValue = pArray[0];   // number of errors
	 if (vValue.vt == VT_I4)
	      numErrors = vValue.lVal;
                  
             // …
             SafeArrayUnaccessData(val.parray);
         }
     }
}

The following example illustrates how to use the API to check messages from the API extended message log using Visual Basic .NET. It assumes that there is an Application object from Example 1:

Public Sub GetExtendedErrorInfo( ByRef scApp As SCAPI.Application )
    Dim nSize As Integer
    Dim nWarnings As Integer
    Dim nErrors As Integer
    Dim nIdx As Integer
    Dim nMsgNumber As Integer
    Dim aErrors() As Object
    ' Do we have messages in the log?
    If scApp.ApplicationEnvironment.PropertyBag("Application.Api.MessageLog", _ "Is Empty").Value(0) = False Then
         ' Retrieve a log
         aErrors = _
         scApp.ApplicationEnvironment.PropertyBag("Application.Api.MessageLog", _ "Log").Value(0)
          nSize = Int(aErrors(0))
          nIdx = 1
          nMsgNumber = 0
          Do While nMsgNumber < nSize
               Console.WriteLine("Error " & aErrors(nIdx) & "  " + aErrors(nIdx + 2))
               Select Case aErrors(nIdx + 1)
                   Case SCAPI.SC_MessageLogSeverityLevels.SCD_ESL_WARNING
               nWarnings = nWarnings + 1
                   Case SCAPI.SC_MessageLogSeverityLevels.SCD_ESL_ERROR
               nErrors = nErrors + 1
               End Select
               nIdx = nIdx + 8
               nMsgNumber = nMsgNumber + 1
          Loop
          
          Console.WriteLine("Total number of errors in the transaction " & Str(nSize) & " with: " _& Str(nWarnings) & " warnings, " & Str(nErrors) & " errors.")
    End If
End Sub